#include "myhead.h"

int main(int argc, char const *argv[])
{
    // 创建客户端套接字
    // IPV4地址协议: AF_INET
    // tcp: SOCK_STREAM
    // udp: SOCK_DGRAM
    int cfd = socket(AF_INET, SOCK_STREAM, 0);
    if (cfd == -1)
    {
        perror("socket 创建失败");
        return -1;
    }

    // 设置服务器地址和端口
    struct sockaddr_in s_addr;
    s_addr.sin_family = AF_INET;
    inet_pton(AF_INET, "192.168.6.143", &s_addr.sin_addr); // 服务器 IP
    s_addr.sin_port = htons(3000);                         // 服务器端口(端口号需要使用大端序)

    // 连接到服务器
    int ret = connect(cfd, (struct sockaddr *)&s_addr, sizeof(s_addr));
    if (ret == -1)
    {
        perror("服务器连接失败");
        close(cfd); // 关闭套接字
        return -1;
    }

    printf("已成功连接到服务器 %s:%d\n", inet_ntoa(s_addr.sin_addr), ntohs(s_addr.sin_port));

    char buf[100];
    while (1)
    {
        bzero(buf, sizeof(buf));
        printf("请输入想要发送给服务器的消息 (输入 'exit' 退出)：\n");
        scanf("%s", buf);

        if (strcmp(buf, "exit") == 0)
        {
            printf("退出程序\n");
            break;
        }

        // 发送消息到服务器
        ret = send(cfd, buf, strlen(buf), 0);
        if (ret == -1)
        {
            perror("消息发送失败");
            break;
        }

        // 接收服务器的响应
        bzero(buf, sizeof(buf));
        ret = recv(cfd, buf, sizeof(buf), 0);
        if (ret == 0)
        {
            printf("服务器已断开连接\n");
            break;
        }
        else if (ret == -1)
        {
            perror("接收消息失败");
            break;
        }
        else
        {
            printf("收到服务器发来的消息：%s\n", buf);
        }
    }

    close(cfd); // 关闭套接字
    return 0;
}
